iT邦幫忙

2022 iThome 鐵人賽

DAY 24
0

上集解答

這題的貪婪想法其實很簡單「給比較容易滿足的孩子,他能接受的最小的餅乾。」

下面是程式碼實作:

import java.util.Queue
import java.util.LinkedList

fun main(){
    var n = readln().toInt()
    var kid = readln().split(" ")
    var m = readln().toInt()
    var cookie = readln().split(" ")

    var kid_queue:Queue<Int> = LinkedList<Int>()
    var cookie_queue:Queue<Int> = LinkedList<Int>()

    for(i in 0..n-1){
        kid_queue.add(kid[i].toInt())
    }
    for(j in 0..m-1){
        cookie_queue.add(cookie[j].toInt())
    }

    var ans = 0

    while(kid_queue.isEmpty()==false){
        while(!cookie_queue.isEmpty() && cookie_queue.peek() < kid_queue.peek()){
            cookie_queue.remove()
        }
        if(cookie_queue.peek() >= kid_queue.peek()){
            ans++
            cookie_queue.remove()
        }
        kid_queue.remove()
    }

    println("$ans")
}

我這裡是使用了queue,因為我剛好需要先把輸入全部轉成int,在那之後我只需要照順序使用我的資料。

不過只要能解出來都是好寫法喔~

泡沫排序

今天開始來介紹排序sort,排序一直是演算法中很重要的一環,探討的是怎麼把一個陣列內的內容依照我們的要求(通常是由小到大)排列。

泡沫是排序最常見的作法,他的時間複雜度是O(N²)。

他的做法是,從前兩格開始,如果大小順序相反就交換,然後再去看2、3格,一直比下去,就一定可以將最大的移到最右邊。再跑一遍就可以把第二大的移動到右邊第二格,所以重複n次就可以將陣列排序咯~

import java.util.Queue
import java.util.LinkedList

fun main(){
    var a = arrayOf<Int>(415,3,3,34,542,7,2345,4,32,32,765,5,6,9,658)
    for(i in 0..a.size-1){
        for(j in 0..a.size-2){
            if(a[j] > a[j+1]){
                var temp = a[j]
                a[j] = a[j+1]
                a[j+1] = temp
            }
        }
    }
    for(i in 0..a.size-1){
        println("${a[i]}")
    }
}

其實這個程式碼中,還有一個地方可以優化,就交給你們回去試試看吧。


上一篇
[Day23][演算法]貪婪
下一篇
[Day25][演算法]插入排序
系列文
櫛風風的「完全不會寫程式,從零開始的 Kotlin 教學」30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言